package top.lixunda.ecommerce.server.business;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import top.lixunda.ecommerce.server.business.api.entity.dto.PageConvertWrapperDTO;

import java.util.List;

/**
 * @author lixunda
 * @version time:2020/3/20 16:53
 */
public interface IBaseConvertService<T, P extends BaseMapper<E>, E
        , D> extends IService<T> {

    /**
     * 基础表的service类
     *
     * @return 基础表的service对象
     */
    BaseServiceImpl<P, E> getAtomicService();

    /**
     * 根据id查询详细信息
     *
     * @param id 主键id
     * @return 详细数据
     */
    D getConvertById(String id);

    /**
     * 根据多个id查询详细数据列表
     *
     * @param idList 多个id列表
     * @return 详细数据列表
     */
    List<D> listConvertByIds(List<String> idList);

    /**
     * 条件获取一个详细数据
     *
     * @param queryWrapper 查询条件
     * @return 转换数据
     */
    D getOneConvert(LambdaQueryWrapper<T> queryWrapper);

    /**
     * 添加查询转换数据列表
     *
     * @param queryWrapper 查询条件
     * @return 转换数据列表
     */
    List<D> listConvert(LambdaQueryWrapper<T> queryWrapper);

    /**
     * 查询所有转换数据
     *
     * @return 所有转换数据支持的列表
     */
    List<D> listConvert();

    /**
     * 获取数量
     *
     * @param queryWrapper 查询条件
     * @return 数据的个数
     */
    int countConvert(LambdaQueryWrapper<E> queryWrapper);

    /**
     * 获取所有的数量
     *
     * @return 数量
     */
    int countConvert();

    /**
     * 分页条件查询
     *
     * @param pageWrapper 分页查询条件
     * @return 分页数据
     */
    IPage<D> pageConvert(PageConvertWrapperDTO<E, T, D> pageWrapper);

    /**
     * 分页查询
     *
     * @param page 分页数据
     * @return 分页数据
     */
    IPage<D> pageConvert(Page<D> page);
}
